package cn.afterturn.easypdf.util;

import cn.afterturn.easypdf.pdf.entity.PdfExportParams;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

import java.io.IOException;
import java.util.List;

/**
 * 提供PDF一些通用的方法,降低代码重复性
 */
public class PdfCommonUtil {


    /**
     * 获取PAGE头部内容
     * 解决排序性混乱问题
     *
     * @param pdDocument
     * @return
     */
    public static String getPageContentTrim(PDDocument pdDocument) {
        return WordsUtil.replaceAll(getPageContent(pdDocument, true));
    }

    public static String getPageContentTrim(PDDocument pdDocument, boolean sort) {
        return WordsUtil.replaceAll(getPageContent(pdDocument, sort));
    }

    /**
     * 获取PAGE头部内容
     * 解决排序性混乱问题
     *
     * @param pdDocument
     * @return
     */
    public static String getPageContent(PDDocument pdDocument) {
        return getPageContent(pdDocument, true);
    }

    /**
     * 获取PAGE头部内容
     * 解决排序性混乱问题
     *
     * @param pdDocument
     * @return
     */
    public static String getPageContent(PDDocument pdDocument, boolean sort) {
        String pageOne = null;
        try {
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.setStartPage(1);
            stripper.setEndPage(1);
            stripper.setSortByPosition(sort);
            pageOne = stripper.getText(pdDocument);
            pageOne = KangXiDictUtil.convertWord(pageOne);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return pageOne;
    }

    /**
     * 根据pdf的宽度,自动切割换行字符串
     *
     * @param lines
     * @param fontSize
     * @param params
     * @return
     */
    public static List<String> autoWrapLine(List<String> lines, int fontSize, PdfExportParams params) {
        int maxWord = (int) ((params.getPageSize().getWidth() - 40) / (fontSize));
        for (int i = lines.size() - 1; i >= 0; i--) {
            String line = lines.get(i);
            int j = 0;
            if (line.length() > maxWord) {
                lines.remove(i);
                while (line.length() > maxWord) {
                    String str = line.substring(0, maxWord);
                    lines.add(i + j, str);
                    line = line.substring(maxWord);
                    j++;
                }
                if (line.length() > 0) {
                    lines.add(i + j, line);
                }
            }
        }
        return lines;
    }
}
